home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
cdck201
/
cdck201.bas
< prev
next >
Wrap
BASIC Source File
|
1994-06-01
|
44KB
|
1,272 lines
10 '***********************************
20 '* CDCHECK.BAS Copyright A.Okuyama *
30 '* CD-DA表面検査プログラム *
40 '* 1992. 3.16 Ver 2.01 1994. 1.31 *
50 '***********************************
60 STOP OFF
70 CLEAR
80 RETRY = 0
90 DEF_FILE$="CDCK.DEF" '***** 初期設定ファイル名
100 IMG_FILE$="CDCK.TIF" '***** 16色イメージ出力ファイル名
110 WHP_FILE$="CKW#####.TIF" '***** WHIPSイメージ出力ファイル名
120 CDL_FILE$="WHIPS4.CDL" '***** WHIPS.CDLのフルパス名
130 TMP_FILE$="WHIPSTMP.CDL" '***** WHIPS用仮CDLファイル名
140 LOG_FILE$="CDCK.LOG" '***** 検査ログ・ファイル名
150 RETRYSEC = 15 '***** 再検査最大遡及秒数
160 RETRYMAX = 5 '***** エラー検出時の繰り返し検査回数
170 START = 0 '***** 開始時コメント (0:OFF, 1:ON)
180 ENDMODE = 0 '***** 終了時電源OFF (0:OFF, 1:ON)
190 CDIMAGE = 1 '***** CDイメージ表示 (0:OFF, 1:ON)
200 DVX = 439 '***** CDイメージ中心X座標
210 DVY = 300 '***** CDイメージ中心Y座標
220 CDIMFILE = 0 '***** 16色イメージ出力 (0:OFF, 1:ON)
230 IMGLZW = 1 '***** 16色イメージ圧縮 (0:OFF, 1:ON)
240 WHIPFILE = 1 '***** WHIPSイメージ出力 (0:OFF, 1:ON)
250 WHPLZW = 1 '***** WHIPSイメージ圧縮 (0:OFF, 1:ON)
260 WCDLFILE = 1 '***** WHIPS.CDL自動編集 (0:OFF, 1:ON)
270 CDLEDT = 0 '***** 新規CDL追加 (0:OFF, 1:ON)
280 ELPRN = 1 '***** プリンター出力 (0:OFF, 1:ON)
290 CDCK_LOG = 1 '***** 検査ログ (0:OFF, 1:ON)
300 CNTCKS = 2 '***** 計数検査初期設定時間(秒)
310 XSCNT = 2 '***** 計数検査誤差範囲設定(±計数)
320 MTR = 200 '***** 最大トラック数
330 DIM CDI%(5),CDS%(8)
340 DIM TSSEC(MTR),TRKTIME$(MTR),ETRCOLOR(MTR),DVSTFLM(MTR)
350 DIM COMMENT$(24),G(15),R(15),B(15),ETRTIME$(MTR)
360 DIM CDLTIME$(MTR),CDLTI$(MTR)
370 CDLNO=0
380 GOSUB *CDL_INZ
390 FOR C=0 TO 15
400 READ G(C),R(C),B(C)
410 NEXT C
420 DATA 48, 0, 16 '***** バック・グラウンドの緑色
430 DATA 68, 16, 32 '***** 縁の緑色
440 DATA 80, 32, 48 '***** 最大記録領域の緑色
450 DATA 80, 80, 80 '***** 濃い灰色
460 DATA 16, 48, 48 '***** 薄紫
470 DATA 0, 80, 80 '***** 紫
480 DATA 96, 96, 96 '***** 薄い灰色
490 DATA 0, 0, 80 '***** 青(データ・トラック)
500 DATA 112, 0,112 '***** 水(検査中のトラック)
510 DATA 0, 0, 0
520 DATA 0, 0, 0
530 DATA 0, 0, 0
540 DATA 176,176, 0 '***** 黄(WHIPSイメージ文字用)
550 DATA 0, 0,176 '***** 青(タイトルバー下地)
560 DATA 0, 96, 96 '***** 紫(タイトルバー下地)
570 DATA 0,176, 0 '***** 赤(タイトルバー下地)
580 MOUSE 0
590 MOUSE 1,,,0
600 GOSUB *DEF_LOAD
610 START = ABS( START = 0 ) '反転
620 ENDMODE = ABS( ENDMODE <> 0 )
630 CDIMAGE = ABS( CDIMAGE = 0 ) '反転
640 CDIMFILE = ABS( CDIMFILE = 0 ) '反転
650 IMGLZW = ABS( IMGLZW <> 0 )
660 WHIPFILE = ABS( WHIPFILE = 0 ) '反転
670 WHPLZW = ABS( WHPLZW <> 0 )
680 WCDLFILE = ABS( WCDLFILE = 0 ) '反転
690 CDLEDT = ABS( CDLEDT = 0 ) '反転
700 ELPRN = ABS( ELPRN = 0 ) '反転
710 CDCK_LOG = ABS( CDCK_LOG = 0 ) '反転
720 IF RETRYMAX<1 THEN RETRYMAX=1
730 CDCKW$ = WHP_FILE$
740 CONSOLE 0,25,0
750 *MAIN:'*****************************
760 SCREEN 0
770 SCREEN@ 0
780 VIEW (0,0)-(639,479)
790 FOR C=0 TO 15
800 PALETTE C,[G(C),R(C),B(C)]
810 NEXT C
820 ON ERROR GOTO *ERRLOOP
830 PMTIME$="24:00:00"
840 FOR C=0 TO MTR
850 TSSEC(C)=0
860 TRKTIME$(C)=""
870 ETRCOLOR(C)=0
880 ETRTIME$(C)=""
890 NEXT C
900 COLOR 0,%0,%0
910 CLS
920 GOSUB *PANEL
930 LINE (0,19)-(639, 25),PSET,%13,BF,%13
940 LINE (0,26)-(639, 29),PSET,%14,BF,%14
950 LINE (0,30)-(639, 37),PSET,%15,BF,%15
960 IF START=0 THEN
970 DUMMY=MOUSE(4,1)
980 GOSUB *COMMENT
990 DUMMY=MOUSE(4,1)
1000 START=1
1010 ENDIF
1020 IF I$=CHR$(&H1B) THEN
1030 GOSUB *ENDING
1040 CLEAR
1050 SYSTEM '***** プログラム終了 *****
1060 ENDIF
1070 EP=1
1080 GOSUB *CDDINIT '***** CDドライブ初期化 *****
1090 CD STOP
1100 EP=0
1110 GOSUB *INF
1120 LPRN=1
1130 IF ELPRN=0 THEN GOSUB *LPRN
1140 LPRN=0
1150 GOSUB *TRKTIME
1160 IF CDI%(1)=2 THEN
1170 ETRCOLOR(1)=3
1180 GOSUB *STIME
1190 GOTO *RES
1200 ENDIF
1210 GOSUB *STIME
1220 GOSUB *START
1230 IF ENDMODE=1 THEN
1240 GOSUB *ENDING
1250 CLEAR
1260 OUT &H22,&H40 '***** 検査終了後 電源OFF *****
1270 ENDIF
1280 *RES:'***** 再スタート *****
1290 LOCATE 5,3
1300 COLOR 6
1310 PRINT "《 [RETURN][実行]を押すと検査を開始します。[ESC]を押すと終了します。》"
1320 GOSUB *PANEL
1330 IF (MOUSE(2,0) AND NOT(MOUSE(2,1))) OR PTRIG(1)=4 THEN
1340 GOTO *MAIN
1350 ENDIF
1360 IF (MOUSE(2,1) AND NOT(MOUSE(2,0))) OR PTRIG(1)=1 THEN
1370 GOSUB *ENDING
1380 CLEAR
1390 SYSTEM '***** プログラム終了 *****
1400 ENDIF
1410 I$=INKEY$
1420 IF I$="" THEN *RES
1430 IF I$=CHR$(27) THEN
1440 GOSUB *ENDING
1450 CLEAR
1460 SYSTEM '***** プログラム終了 *****
1470 ENDIF
1480 IF I$=CHR$(13) THEN
1490 GOTO *MAIN
1500 ELSE
1510 GOTO *RES
1520 ENDIF
1530 *DEF_LOAD:'***** DEFファイル読み込み *****
1540 ON ERROR GOTO *DEFERROR
1550 EP=1
1560 OPEN DEF_FILE$ FOR INPUT AS #1
1570 EP=0
1580 *NEXT_DEF:'***** 次行読み込み *****
1590 IF EOF(1) THEN *EODEF
1600 LINE INPUT #1,DUM$
1610 IF KINSTR(DUM$,"'") THEN
1620 DUM$=KLEFT$(DUM$,KINSTR(KACNV$(DUM$),"'")-1)
1630 ENDIF
1640 IF KINSTR(KACNV$(DUM$),"=")=0 THEN *NEXT_DEF
1650 ITEM$=KLEFT$(DUM$,KINSTR(KACNV$(DUM$),"=")-1)
1660 DAT$=KMID$(DUM$,KINSTR(KACNV$(DUM$),"=")+1,KLEN(DUM$)-KINSTR(KACNV$(DUM$),"="))
1670 IF KLEFT$(KACNV$(DAT$),1)=" " THEN
1680 *LTRIM: '***** LTRIM *****
1690 DAT$=KMID$(DAT$,2,KLEN(DAT$))
1700 IF KLEFT$(KACNV$(DAT$),1)=" " THEN *LTRIM
1710 ENDIF
1720 IF KINSTR(KACNV$(DAT$)," ") THEN '***** RTRIM *****
1730 DAT$=KLEFT$(DAT$,KINSTR(KACNV$(DAT$)," ")-1)
1740 ENDIF
1750 'PRINT ":";ITEM$;":";DAT$;":"'***** CHECK POINT *****
1760 IF INSTR(ITEM$,"IMG_FILE$") THEN '***** 16色イメージ・ファイル名
1770 IMG_FILE$=DAT$
1780 ENDIF
1790 IF INSTR(ITEM$,"WHP_FILE$") THEN '***** WHIPS用イメージ・ファイル名
1800 WHP_FILE$=DAT$
1810 ENDIF
1820 IF INSTR(ITEM$,"CDL_FILE$") THEN '***** WHIPS4.CDLのフルパス名
1830 CDL_FILE$=DAT$
1840 ENDIF
1850 IF INSTR(ITEM$,"TMP_FILE$") THEN '***** WHIPS用仮CDLファイル名
1860 TMP_FILE$=DAT$
1870 ENDIF
1880 IF INSTR(ITEM$,"LOG_FILE$") THEN '***** 検査ログ・ファイル名
1890 LOG_FILE$=DAT$
1900 ENDIF
1910 IF INSTR(ITEM$,"RETRYSEC") THEN '***** 再検査最大遡及秒数
1920 RETRYSEC=VAL(DAT$)
1930 ENDIF
1940 IF INSTR(ITEM$,"RETRYMAX") THEN '***** エラー検出時の繰り返し検査回数
1950 RETRYMAX=VAL(DAT$)
1960 ENDIF
1970 IF INSTR(ITEM$,"START") THEN '***** 開始時コメント(0:ON, 1:OFF)
1980 START=VAL(DAT$)
1990 ENDIF
2000 IF INSTR(ITEM$,"ENDMODE") THEN '***** 0:SYSTEM, 1:POFF
2010 ENDMODE=VAL(DAT$)
2020 ENDIF
2030 IF INSTR(ITEM$,"CDIMAGE") THEN '***** CDイメージ表示(0:ON,1:OFF)
2040 CDIMAGE=VAL(DAT$)
2050 ENDIF
2060 IF INSTR(ITEM$,"DVX") THEN '***** CDイメージ中心X座標
2070 DVX=VAL(DAT$)
2080 ENDIF
2090 IF INSTR(ITEM$,"DVY") THEN '***** CDイメージ中心Y座標
2100 DVY=VAL(DAT$)
2110 ENDIF
2120 IF INSTR(ITEM$,"CDIMFILE") THEN '***** 16色イメージ出力(0:ON, 1:OFF)
2130 CDIMFILE=VAL(DAT$)
2140 ENDIF
2150 IF INSTR(ITEM$,"IMGLZW") THEN '***** 16色イメージ圧縮(0:OFF, 1:ON)
2160 IMGLZW=VAL(DAT$)
2170 ENDIF
2180 IF INSTR(ITEM$,"WHIPFILE") THEN '***** WHIPSイメージ出力(0:ON, 1:OFF)
2190 WHIPFILE=VAL(DAT$)
2200 ENDIF
2210 IF INSTR(ITEM$,"WHPLZW") THEN '***** WHIPSイメージ圧縮(0:OFF, 1:ON)
2220 WHPLZW=VAL(DAT$)
2230 ENDIF
2240 IF INSTR(ITEM$,"WCDLFILE") THEN '***** WHIPS4.CDL自動編集(0:ON,1:OFF)
2250 WCDLFILE=VAL(DAT$)
2260 ENDIF
2270 IF INSTR(ITEM$,"CDLEDT") THEN '***** 新規WHIPS4.CDL追加(0:ON,1:OFF)
2280 CDLEDT=VAL(DAT$)
2290 ENDIF
2300 IF INSTR(ITEM$,"ELPRN") THEN '***** プリンター出力(0:ON, 1:OFF)
2310 ELPRN=VAL(DAT$)
2320 ENDIF
2330 IF INSTR(ITEM$,"CDCK_LOG") THEN '***** 検査ログ (0:ON, 1:OFF)
2340 CDCK_LOG=VAL(DAT$)
2350 ENDIF
2360 IF INSTR(ITEM$,"CNTCKS") THEN '***** 計数検査初期設定時間(秒)
2370 CNTCKS=VAL(DAT$)
2380 ENDIF
2390 IF INSTR(ITEM$,"XSCNT") THEN '***** 計数検査誤差範囲設定(±計数)
2400 XSCNT=VAL(DAT$)
2410 ENDIF
2420 IF INSTR(ITEM$,"MTR") THEN '***** 最大トラック数
2430 MTR=VAL(DAT$)
2440 ENDIF
2450 IF INSTR(ITEM$,"G(") THEN '***** Gカラー
2460 G(VAL(MID$(ITEM$,INSTR(ITEM$,"G(")+2,2)))=VAL(DAT$)
2470 ENDIF
2480 IF INSTR(ITEM$,"R(") THEN '***** Rカラー
2490 R(VAL(MID$(ITEM$,INSTR(ITEM$,"R(")+2,2)))=VAL(DAT$)
2500 ENDIF
2510 IF INSTR(ITEM$,"B(") THEN '***** Bカラー
2520 B(VAL(MID$(ITEM$,INSTR(ITEM$,"B(")+2,2)))=VAL(DAT$)
2530 ENDIF
2540 GOTO *NEXT_DEF
2550 *EODEF:'*****
2560 CLOSE
2570 RETURN
2580 *DEFERROR:'***** DEFファイル読み込みエラー処理 *****
2590 EP=0
2600 RESUME *EODEF
2610 *PANEL:'***** タイトルバー表示 *****
2620 MPMTIME$=PMTIME$
2630 PMTIME$=TIME$
2640 IF MPMTIME$=PMTIME$ THEN RETURN
2650 XTCNT=0
2660 IF START=1 AND ((MOUSE(2,0) AND MOUSE(3,1)) OR PTRIG(1)=2) THEN
2670 ENDMODE=ABS(ENDMODE-1) '***** 終了モード(MOUSE L+R)*****
2680 DUMMY=MOUSE(4,1)
2690 ENDIF
2700 LOCATE 0,1
2710 COLOR 12
2720 IF ENDMODE=0 THEN
2730 PRINT " A.Okuyama Ver 2.01 ";
2740 ELSE
2750 PRINT " 検査終了後 電源 OFF ";
2760 ENDIF
2770 COLOR 14
2780 PRINT " CD-DA 表面検査 プログラム ";
2790 COLOR 12
2800 PRINT USING " & & & & ";DATE$;PMTIME$;
2810 RETURN
2820 *COMMENT:'***** コメント表示 *****
2830 PALETTE 10,[48,0,16]
2840 GOSUB *COMPRN
2850 FOR C=0 TO 12
2860 PALETTE 10,[16*(3+C),16*C,16*(1+C)] '***** コメント色設定 *****
2870 FOR DUMMY=1 TO 50
2880 GOSUB *PANEL
2890 NEXT DUMMY
2900 NEXT C
2910 *COMCLS:'***** コメント・フェード・アウト *****
2920 GOSUB *PANEL
2930 I$=INKEY$
2940 IF I$=CHR$(&H18) OR I$=CHR$(&H1B) OR MOUSE(2,1) OR PTRIG(1)=1 THEN
2950 I$=CHR$(&H1B)
2960 ELSE
2970 IF I$="" AND NOT(MOUSE(2,0)) AND NOT(PTRIG(1)=4) THEN *COMCLS
2980 ENDIF
2990 FOR C=12 TO 0 STEP -1
3000 PALETTE 10,[16*(3+C),16*C,16*(1+C)] '***** コメント消去 *****
3010 COLOR 0
3020 FOR DUMMY=1 TO 50
3030 GOSUB *PANEL
3040 NEXT DUMMY
3050 NEXT C
3060 SYMBOL (8*32-4,18*3),COMMENT$(2),1,1,%0
3070 SYMBOL (8*9,18*5),COMMENT$(4),1,1,%0
3080 SYMBOL (8*4,18*7),COMMENT$(6),1,1,%0
3090 SYMBOL (8*1,18*9),COMMENT$(8),1,1,%0
3100 SYMBOL (8*28+4,18*11),COMMENT$(10),1,1,%0
3110 FOR C=12 TO 25
3120 SYMBOL (8*0,18*C),COMMENT$(C-1),1,1,%0
3130 NEXT C
3140 RETURN
3150 *COMPRN:'***** コメント内容 *****
3160 COMMENT$(0)=""
3170 COMMENT$(1)=""
3180 COMMENT$(2)="【 使 用 方 法 】"
3190 COMMENT$(3)=""
3200 COMMENT$(4)="[実行][RETURN]キー(マウス左・パッドRUN)を押すと検査を開始します。"
3210 COMMENT$(5)=""
3220 COMMENT$(6)="[ESC]キー(マウス右・パッドA)を押すと検査をキャンセルし、次の曲に進みます。"
3230 COMMENT$(7)=""
3240 COMMENT$(8)="[TAB]キー(マウス左右・パッドB)を検査中に押すと終了時電源OFFの選択ができます。"
3250 COMMENT$(9)=""
3260 COMMENT$(10)="【 使 用 上 の 注 意 】"
3270 COMMENT$(11)=""
3280 COMMENT$(12)=" (1)CDドライブ側のエラー訂正機構が働くため単発的な雑音は見逃す場合があります。"
3290 COMMENT$(13)=" (2)CDドライブ側のバッファの状態によって、対象トラックの直前に傷がある場合な"
3300 COMMENT$(14)=" どに再生不能と判定する時があります。"
3310 COMMENT$(15)=" (3)計数検査、秒送り検査、ハード・エラー検出によって傷を判定します。"
3320 DUMMY$=AKCNV$(RIGHT$(STR$(XSCNT+1),LEN(STR$(XSCNT+1))-1))
3330 COMMENT$(16)=" (4)時計とCDの秒送りの差を計数し、±"+DUMMY$
3340 COMMENT$(16)=COMMENT$(16)+"以上変化したとき傷を判定します。"
3350 DUMMY$=AKCNV$(RIGHT$(STR$(XSCNT),LEN(STR$(XSCNT))-1))
3360 COMMENT$(17)=" (5)計数の差が0または最大値-"+DUMMY$
3370 COMMENT$(17)=COMMENT$(17)+"以上のときはトラックの先頭から再実行します。"
3380 COMMENT$(18)=" (6)時計とCDの秒送りが±1秒を超えてズレたとき傷を判定します。"
3390 COMMENT$(19)=" (7)トラックの始まりと終わりの十数秒間は計数検査、秒送り検査ができません。"
3400 IF 1<RETRYMAX THEN
3410 DUMMY$=AKCNV$(RIGHT$(STR$(RETRYSEC),LEN(STR$(RETRYSEC))-1))
3420 COMMENT$(20)=" (8)傷を判定した場合、"+DUMMY$
3430 DUMMY$=AKCNV$(RIGHT$(STR$(RETRYMAX-1),LEN(STR$(RETRYMAX-1))-1))
3440 COMMENT$(20)=COMMENT$(20)+"秒前またはトラックの先頭から"+DUMMY$
3450 COMMENT$(20)=COMMENT$(20)+"回再検査します。"
3460 ELSE
3470 COMMENT$(20)=" (8)傷を判定した場合、次のトラックに進みます。"
3480 ENDIF
3490 COMMENT$(21)=" (9)データ・トラックは検査しません。"
3500 IF CDCK_LOG THEN
3510 COMMENT$(22)=" ※ 検査ログは作成しません。"
3520 ELSE
3530 COMMENT$(22)=" ※ 検査ログを《"+LOG_FILE$+"》に作成します。"
3540 ENDIF
3550 IF WHPSFILE THEN
3560 COMMENT$(23)=" ※ WHIPS用"
3570 IF WHPLZW THEN COMMENT$(23)=COMMENT$(23)+"圧縮"
3580 COMMENT$(23)=COMMENT$(23)+"TIFは作成しません。"
3590 ELSE
3600 COMMENT$(23)=" ※ WHIPS用"
3610 IF WHPLZW THEN COMMENT$(23)=COMMENT$(23)+"圧縮"
3620 COMMENT$(23)=COMMENT$(23)+"TIFを《"+WHP_FILE$+"》に作成します。"
3630 ENDIF
3640 IF WCDLFILE THEN
3650 COMMENT$(24)=" ※ WHIPS用CDLファイルは編集しません。"
3660 ELSE
3670 COMMENT$(24)=" ※《"+CDL_FILE$
3680 COMMENT$(24)=COMMENT$(24)+"(仮 "+TMP_FILE$+")》を編集します。"
3690 ENDIF
3700 'IF CDIMFILE THEN
3710 ' COMMENT$(24)=""
3720 'ELSE
3730 ' COMMENT$(24)=" ※ 16色"
3740 ' IF IMGLZW THEN COMMENT$(24)=COMMENT$(24)+"圧縮"
3750 ' COMMENT$(24)=COMMENT$(24)+"TIFを《"+IMG_FILE$+"》に作成します。"
3760 'ENDIF
3770 SYMBOL (8*32-4,18*3),COMMENT$(2),1,1,%10
3780 SYMBOL (8*9,18*5),COMMENT$(4),1,1,%10
3790 SYMBOL (8*4,18*7),COMMENT$(6),1,1,%10
3800 SYMBOL (8*1,18*9),COMMENT$(8),1,1,%10
3810 SYMBOL (8*28+4,18*11),COMMENT$(10),1,1,%10
3820 FOR C=12 TO 25
3830 SYMBOL (8*0,18*C),COMMENT$(C-1),1,1,%10
3840 NEXT C
3850 RETURN
3860 *ENDING:'***** エンディング *****
3870 FOR DUMMY=127 TO 0 STEP -1
3880 VOL=INT(DUMMY/2)
3890 OUT &H4E2,VOL
3900 OUT &H4E3,4 'CD(L)vol.
3910 OUT &H4E2,VOL
3920 OUT &H4E3,5 'CD(R)vol.
3930 IF DUMMY<64 THEN PC=DUMMY/63 ELSE PC=1
3940 PALETTE 0,[16*3*PC,16*0*PC,16*1*PC] '***** バック・グラウンドの緑色
3950 PALETTE 1,[16*4*PC,16*1*PC,16*2*PC] '***** 縁の緑色
3960 PALETTE 2,[16*5*PC,16*2*PC,16*3*PC] '***** 最大記録領域の緑色
3970 PALETTE 3,[16*5*PC,16*5*PC,16*5*PC] '***** 濃い灰色
3980 PALETTE 4,[16*1*PC,16*3*PC,16*3*PC] '***** 薄紫
3990 PALETTE 5,[16*0*PC,16*5*PC,16*5*PC] '***** 紫
4000 PALETTE 6,[16*6*PC,16*6*PC,16*6*PC] '***** 薄い灰色
4010 PALETTE 7,[16*0*PC,16*0*PC,16*5*PC] '***** 青(データ・トラック)
4020 PALETTE 8,[16*7*PC,16*0*PC,16*7*PC] '***** 水(検査中のトラック)
4030 PALETTE 10,[16*3*PC,16*0*PC,16*1*PC] '***** メッセージ表示
4040 GOSUB *PANEL
4050 NEXT DUMMY
4060 PALETTE 13,[16* 0,16* 0,16* 0]
4070 PALETTE 14,[16* 0,16* 0,16* 0]
4080 PALETTE 15,[16* 0,16* 0,16* 0]
4090 COLOR 7
4100 CLS
4110 GOSUB *CDDINIT '***** CDドライブ初期化 *****
4120 EP=-1
4130 CD STOP
4140 EP=0
4150 RETURN
4160 *INF:'***** CDインフォメーション *****
4170 ON ERROR GOTO *ERRLOOP
4180 CDINF CDI%
4190 TOTALFLM=(CDI%(2)*60+CDI%(3))*75+CDI%(4)
4200 COLOR 7
4210 LOCATE 0,0
4220 ON CDI%(1) GOSUB *CD_INF1,*CD_INF2,*CD_INF3
4230 GOTO *INFJP1
4240 *CD_INF1:'**********
4250 PRINT "音楽専用CDです。"
4260 RETURN
4270 *CD_INF2:'**********
4280 COLOR 2
4290 PRINT "データ専用CDです。このプログラムでは検査できません。"
4300 COLOR 7
4310 ETRCOLOR(1)=3
4320 DVSTFLM(1)=TOTALFLM
4330 GOSUB *CDVIEW
4340 RETURN
4350 *CD_INF3:'**********
4360 PRINT "音楽・データ共用CDです。"
4370 RETURN
4380 *INFJP1:'**********
4390 IF CDI%(1)=2 THEN *INFJP2
4400 COLOR 5
4410 LOCATE 30,0
4420 PRINT "水色は再生中"
4430 COLOR 1
4440 LOCATE 44,0
4450 PRINT "青色はデータ"
4460 COLOR 3
4470 LOCATE 58,0
4480 PRINT "紫色は再生不能"
4490 *INFJP2:'**********
4500 COLOR 7
4510 LOCATE 0,2
4520 PRINT USING "《 全### トラック### 分### 秒### フレーム 》";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
4530 RETURN
4540 *LPRN:'***** プリント印刷処理 *****
4550 ON ERROR GOTO *ERRLOOP
4560 IF CDI%(1)=2 THEN RETURN
4570 LPRINT DATE$;" ";TIME$;" ";
4580 IF CDI%(1)=1 THEN
4590 LPRINT "音楽専用CD "
4600 ELSE
4610 IF CDI%(1)=3 THEN
4620 LPRINT "音楽・データ共用CD "
4630 ENDIF
4640 ENDIF
4650 LPRINT USING "全### トラック### 分### 秒### フレームです。";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
4660 IF ELPRN=0 THEN
4670 LOCATE 72,0
4680 COLOR 2
4690 PRINT "〔印刷〕";
4700 ENDIF
4710 RETURN
4720 *TRKTIME:'***** 各トラック先頭までのフレーム総数 *****
4730 FOR C=1 TO CDI%(5)
4740 TSSEC(C)=VAL(LEFT$(CDSTIME$(C),2))*60+INT(VAL(MID$(CDSTIME$(C),4,2))+VAL(RIGHT$(CDSTIME$(C),2))/75+.5!)
4750 TSSEC=VAL(LEFT$(CDSTIME$(C),2))*60+VAL(MID$(CDSTIME$(C),4,2))
4760 IF CDI%(5)<C+1 THEN
4770 TESEC=CDI%(2)*60+CDI%(3)
4780 ELSE
4790 TESEC=VAL(LEFT$(CDSTIME$(C+1),2))*60+VAL(MID$(CDSTIME$(C+1),4,2))
4800 ENDIF
4810 TSFLM=VAL(RIGHT$(CDSTIME$(C),2))
4820 IF CDI%(5)<C+1 THEN
4830 TEFLM=CDI%(4)
4840 ELSE
4850 TEFLM=VAL(RIGHT$(CDSTIME$(C+1),2))
4860 ENDIF
4870 TRACKSEC=INT(TESEC)-INT(TSSEC)+INT((TEFLM-TSFLM)/75)
4880 TRKTIME$(C)=RIGHT$(STR$(100+INT(TRACKSEC/60)),2)+":"+RIGHT$(STR$(100+(TRACKSEC MOD 60)),2)+":"+RIGHT$(STR$(100+(75+TEFLM-TSFLM) MOD 75),2)
4890 DVSTFLM(C-1)=TSSEC(C)*75
4900 NEXT C
4910 DVSTFLM(C-1)=TOTALFLM
4920 RETURN
4930 *STIME:'***** 1~120曲目の時間表示 *****
4940 FOR C=1 TO CDI%(5)
4950 IF 120<C THEN *STJP
4960 LOCATE 13*INT((C-1)/20),3+C-20*INT((C-1)/20)
4970 IF C=CDS%(5) THEN
4980 COLOR 7
4990 PRINT USING "###*";C;
5000 COLOR 5-ETRCOLOR(C)*2
5010 ELSE
5020 COLOR 6
5030 PRINT USING "###/";C;
5040 COLOR 4-ETRCOLOR(C)
5050 ENDIF
5060 PRINT TRKTIME$(C)
5070 *STJP:'**********
5080 NEXT C
5090 RETURN
5100 *START:'***** 検査開始トラック指定 *****
5110 CKTOTAL=0
5120 IF CDI%(1)=3 THEN
5130 STRACK=2
5140 ETRCOLOR(1)=3
5150 ELSE
5160 STRACK=1
5170 ENDIF
5180 *ERSTART:'***** 新トラック検査開始 *****
5190 XTIME=0
5200 MTIME=0
5210 RTIME=0
5220 ONMIN=0
5230 ONSEC=0
5240 MOUSE 0
5250 CDS%(2)=VAL(LEFT$(CDSTIME$(STRACK),2))
5260 CDS%(3)=VAL(MID$(CDSTIME$(STRACK),4,2))
5270 CDS%(4)=VAL(RIGHT$(CDSTIME$(STRACK),2))
5280 CKMIN=VAL(LEFT$(CDSTIME$(STRACK),2))
5290 CKSEC=VAL(MID$(CDSTIME$(STRACK),4,2))
5300 CKFLM=VAL(RIGHT$(CDSTIME$(STRACK),2))
5310 CKTOTAL=CKMIN*60+CKSEC '+CKFLM/75 '***** 指定トラック総合秒数 *****
5320 COLOR 5
5330 LOCATE 0,3
5340 PRINT USING "《 検査実行済### 分### 秒 計数検査OFF 》";CDS%(2);CDS%(3)
5350 COLOR 5
5360 LOCATE 41,3
5370 PRINT USING "### トラック### 分### 秒目(##/##)検査 ";STRACK;ONMIN;ONSEC;RETRY+1;RETRYMAX
5380 I$=INKEY$
5390 IF I$=CHR$(27) THEN *ENST '***** キャンセル(ESC KEY)*****
5400 IF NOT(MOUSE(2,0)) AND MOUSE(2,1) THEN *ENST '***** (MOUSE R)*****
5410 IF PTRIG(1)=1 THEN *ENST '***** ( PAD A )*****
5420 IF I$=CHR$(9) THEN
5430 ENDMODE=ABS(ENDMODE-1) '***** 終了モード(TAB KEY)*****
5440 ENDIF
5450 ON ERROR GOTO *ERRLOOP
5460 IF RETRY=0 THEN
5470 CD PLAY STRACK '***** 指定トラック検査開始 *****
5480 ELSE
5490 RESTFLM=(CDS%(6)*60+CDS%(7))*75+CDS%(8)-RETRYSEC*75
5500 IF RESTFLM<0 THEN
5510 CD PLAY STRACK
5520 ELSE
5530 RESTMIN=INT(RESTFLM/60/75)
5540 RESTSEC=INT(RESTFLM/75-RESTMIN*60)
5550 RESTFLM=RESTFLM-(RESTMIN*60+RESTSEC)*75
5560 RTIME=RESTMIN*60+RESTSEC
5570 RENDMIN=VAL(LEFT$(TRKTIME$(STRACK),2))
5580 RENDSEC=VAL(MID$(TRKTIME$(STRACK),4,2))
5590 RENDFLM=VAL(RIGHT$(TRKTIME$(STRACK),2))
5600 CD PLAY (RESTMIN,RESTSEC,RESTFLM,STRACK)-(RENDMIN,RENDSEC,RENDFLM,STRACK)
5610 ENDIF
5620 ENDIF
5630 CDSTAT CDS%
5640 DEDUCT=TIME '***** DEDUCT=検査開始時刻 *****
5650 CNTCKN=1
5660 XTCNTMAX=0
5670 XMCNT=-1
5680 CDCK=0
5690 PMTIME$="24:00:00"
5700 COLOR 7
5710 LOCATE 41,2
5720 PRINT SPACE$(39)
5730 GOSUB *STIME
5740 IF CDIMAGE=1 OR 0<RETRY THEN *CHECK
5750 IF TRKTIME$(CDS%(5))<"01:00:00" THEN
5760 SYMBOL (DVX-8*17,DVY+160),"《 曲が短いのでイメージは停止中 》",1,1,%15
5770 ELSE
5780 GOSUB *CDVIEW
5790 ENDIF
5800 *CHECK:'***** 繰り返し検査工程 *****
5810 ON ERROR GOTO 0
5820 GOSUB *PANEL
5830 I$=INKEY$
5840 IF I$=CHR$(27) THEN *ENST '***** キャンセル(ESC KEY)*****
5850 IF NOT(MOUSE(2,0)) AND MOUSE(2,1) THEN *ENST '***** (MOUSE R)*****
5860 IF PTRIG(1)=1 THEN *ENST '***** ( PAD A )*****
5870 IF I$=CHR$(9) THEN
5880 ENDMODE=ABS(ENDMODE-1) '***** 終了モード(TAB KEY)*****
5890 ENDIF
5900 ON ERROR GOTO *ERRLOOP
5910 ONMIN=CDS%(6)
5920 ONSEC=CDS%(7)
5930 CDSTAT CDS% '***** CD演奏状態取得 *****
5940 XMTIME=XTIME
5950 XTIME=TIME
5960 IF XTIME<XMTIME THEN XTIME=XTIME+3600*24 '***** 日替わり調整 *****
5970 IF CDS%(1)=0 THEN *ENST '***** 指定トラック検査終了 *****
5980 CKMIN=CDS%(2)
5990 CKSEC=CDS%(3)
6000 CKFLM=CDS%(4)
6010 '***** 時計とCDの秒送りの差を計数し検査する *****
6020 IF PONSEC<>ONSEC THEN '***** 秒送りあり
6030 IF XMCNTMAX<XTCNTMAX THEN
6040 XMCNTMAX=XTCNTMAX '***** 最大値の基準値を設定
6050 ENDIF
6060 XTCNTMAX=0 '***** 最大値初期化
6070 XTCNT=0 '***** 時計秒間計数初期化
6080 ELSE
6090 XTCNTMAX=XTCNTMAX+1 '***** 最大値計数
6100 XTCNT=XTCNT+1 '***** 時計秒間計数
6110 ENDIF
6120 COLOR 5
6130 LOCATE 30,3
6140 IF CDCK<CDS%(6)*60+CDS%(7) THEN
6150 MCDCK=CDCK
6160 CDCK=CDS%(6)*60+CDS%(7)
6170 IF CNTCKS<CNTCKN AND (XTCNT=0 OR XMCNTMAX-XSCNT-1<XTCNT) THEN *ERSTART
6180 ''''IF (XTCNT=0 OR XMCNTMAX-2<XTCNT) AND (XMCNTMAX-2<XMCNT) THEN CNTCKN=1
6190 IF CNTCKS<CNTCKN THEN
6200 PRINT USING "###:###";XMCNT;XTCNT;
6210 ''''''''PRINT XTCNTMAX''''''''
6220 ELSE
6230 PRINT "検査OFF"
6240 ENDIF
6250 IF -1<XMCNT AND CNTCKS<CNTCKN THEN
6260 IF XTCNT<XMCNT-XSCNT OR XMCNT+XSCNT<XTCNT THEN ERROR 53
6270 ELSE
6280 IF 0<MCDCK THEN
6290 XMCNT=XTCNT '***** 基準値設定
6300 CNTCKN=CNTCKN+1 '***** 基準値設定時間調整
6310 ENDIF
6320 ENDIF
6330 ELSE
6340 IF CDS%(6)*60+CDS%(7)<CDCK THEN PRINT "検査OFF"
6350 ENDIF
6360 '***** トラック間のトラック位置を調整する *****
6370 IF CKMIN*60+CKSEC+CKFLM/75<CKTOTAL THEN CKTOTAL=-ABS(CKTOTAL)
6380 '***** CDの秒の切り替わりを検出 *****
6390 IF MTIME<CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!) THEN
6400 MTIME=CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)
6410 ELSE
6420 '***** トラック間は検査しない *****
6430 IF CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!)<MTIME THEN
6440 GOTO *RET
6450 ELSE
6460 MTIME=MTIME+XTIME-XMTIME
6470 GOTO *RET
6480 ENDIF
6490 ENDIF
6500 '***** 時計とCDの秒の差を検査する *****
6510 IF XTIME<DEDUCT+MTIME-RTIME-1 OR DEDUCT+MTIME-RTIME+1<XTIME THEN ERROR 53
6520 *RET:'**********
6530 'PRINT USING"XT:#### XMT:#### MT:#### CK:#### ";XTIME-DEDUCT;XMTIME-DEDUCT;MTIME;CDS%(6)*60+CDS%(7)+INT(CDS%(8)/75+.5!) '***CK POINT***
6540 CKTOTAL=CKMIN*60+CKSEC+CKFLM/75
6550 IF PONSEC<>ONSEC THEN
6560 COLOR 5
6570 LOCATE 0,3
6580 PRINT USING "《 検査実行済### 分### 秒";CDS%(2);CDS%(3)
6590 COLOR 13
6600 LOCATE 41,3
6610 PRINT USING "### トラック### 分### 秒目(##/##)検査 ";CDS%(5);ONMIN;ONSEC;RETRY+1;RETRYMAX
6620 ENDIF
6630 PONSEC=ONSEC
6640 GOTO *CHECK
6650 *ENST:'***** 指定トラック検査終了 *****
6660 STRACK=STRACK+1
6670 RETRY=0
6680 IF STRACK<=CDI%(5) THEN
6690 GOTO *ERSTART '***** 次のトラックを検査 *****
6700 ELSE
6710 STRACK=CDI%(5)
6720 ENDIF
6730 GOSUB *WHIPSCDL '***** WHIPS4.CDL編集 *****
6740 CDS%(5)=0
6750 GOSUB *SAVE_IMG '***** 16色 TIF保存 *****
6760 GOSUB *SAVE_WHP '***** WHIPS用TIF保存 *****
6770 GOSUB *CDCK_LOG '***** 検査ログ保存 *****
6780 COLOR 5
6790 LOCATE 40,2
6800 PRINT " お疲れさま! 検査は終了しました。 "
6810 LOCATE 0,3
6820 PRINT SPACE$(79)
6830 GOSUB *STIME
6840 GOSUB *CDVIEW
6850 RETURN
6860 *CDVIEW:'***** CD表面イメージ表示 *****
6870 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
6880 PKMIN=64
6890 VTMIN=TOTALFLM/74/60
6900 IF 1<VTMIN/PKMIN THEN VTMIN=PKMIN
6910 VFLM=INT(((145^2-70^2)*VTMIN/PKMIN+70^2)^.5!)
6920 CIRCLE (DVX,DVY),157,%1
6930 CIRCLE (DVX,DVY),155,%1,,,,F
6940 CIRCLE (DVX,DVY),148,%2,,,,F
6950 CIRCLE (DVX,DVY),VFLM,%3,,,,F
6960 GOSUB *CDCKVIEW
6970 CIRCLE (DVX,DVY),69,%2,,,,F
6980 *CDVIEW2:'**********
6990 CIRCLE (DVX,DVY),63,%1,,,,F
7000 CIRCLE (DVX,DVY),55,%0,,,,F,PRESET
7010 CIRCLE (DVX,DVY),52,%1
7020 CIRCLE (DVX,DVY),48,%1
7030 CIRCLE (DVX,DVY),35,%1
7040 CIRCLE (DVX,DVY),22,%1
7050 CIRCLE (DVX,DVY),20,%1
7060 RETURN
7070 *CDCKVIEW:'***** CDチェック箇所イメージ表示 *****
7080 FOR CDV=CDI%(5) TO 1 STEP -1
7090 VLFLM=INT(((145^2-70^2)*DVSTFLM(CDV)/74/60/PKMIN+70^2)^.5!*VFLM/((145^2-70^2)*TOTALFLM/74/60/PKMIN+70^2)^.5!+.5!)
7100 IF ETRCOLOR(CDV)=3 THEN
7110 CIRCLE (DVX,DVY),VLFLM,%7,,,,F '***** 青色データ・トラック
7120 GOTO *CDCKJP1
7130 ENDIF
7140 IF ETRCOLOR(CDV)=1 THEN
7150 IF CDV=INT(CDV/2)*2 THEN
7160 CIRCLE (DVX,DVY),VLFLM,%4,,,,F '***** 薄い紫色
7170 GOTO *CDCKJP1
7180 ELSE
7190 CIRCLE (DVX,DVY),VLFLM,%5,,,,F '***** 濃い紫色
7200 GOTO *CDCKJP1
7210 ENDIF
7220 ENDIF
7230 IF CDV=CDS%(5) THEN
7240 CIRCLE (DVX,DVY),VLFLM,%8,,,,F '***** 水色再生中
7250 GOTO *CDCKJP1
7260 ENDIF
7270 IF CDV=INT(CDV/2)*2 THEN
7280 CIRCLE (DVX,DVY),VLFLM,%6,,,,F '***** 薄い灰色
7290 ELSE
7300 CIRCLE (DVX,DVY),VLFLM,%3,,,,F '***** 濃い灰色
7310 ENDIF
7320 *CDCKJP1:'**********
7330 NEXT CDV
7340 RETURN
7350 *SAVE_IMG:'***** CDイメージ・ファイル保存 *****
7360 IF CDIMFILE THEN RETURN
7370 ON ERROR GOTO *ERRLOOP
7380 EP=-1
7390 KILL IMG_FILE$
7400 EP=2
7410 SAVE@ IMG_FILE$,(DVX-157,DVY-157)-(DVX+157,DVY+157),1,IMGLZW
7420 EP=0
7430 RETURN
7440 *SAVE_WHP:'***** WHIPS用CDイメージ・ファイル保存実行 *****
7450 IF WHIPFILE THEN RETURN
7460 GOSUB *SAVE32K
7470 LINE (1,18)-(228, 19),PSET,[G(13),R(13),B(13)],BF,[G(13),R(13),B(13)]
7480 SYMBOL (2,3),"CDCK : "+DATE$+" "+TIME$,1,1,[G(12),R(12),B(12)]
7490 L=0
7500 FOR C=1 TO CDI%(5)
7510 IF ETRCOLOR(C)=1 THEN
7520 X=2
7530 Y=20+18*L
7540 IF L<10 THEN
7550 SYMBOL (X,Y),ETRTIME$(C),1,1,[G(12),R(12),B(12)]
7560 L=L+1
7570 ELSE
7580 SYMBOL (X,Y),"This CD have over 10 errors.",1,1,[G(15),R(15),B(15)]
7590 ENDIF
7600 ENDIF
7610 NEXT C
7620 '*TESTSTOP:IF INKEY$="" THEN *TESTSTOP
7630 ON ERROR GOTO *ERRLOOP
7640 IF CDCKW$<>WHP_FILE$ THEN
7650 DIRC=0
7660 *WHPDIRCK:'***** WHIPS用TIFのディレクトリ・チェック *****
7670 C=KINSTR(DIRC+1,WHP_FILE$,"\")
7680 IF 0<C THEN
7690 DIRC=C
7700 GOTO *WHPDIRCK
7710 ENDIF
7720 CDCKW$=KLEFT$(WHP_FILE$,DIRC)+WHPFTAG$+RIGHT$(STR$(100000+CDLNO),5)+".TIF"
7730 ENDIF
7740 EP=-1
7750 KILL CDCKW$
7760 EP=3
7770 SAVE@ CDCKW$,(0,0)-(229,229),,WHPLZW ' 230*230dot Color32K
7780 EP=0
7790 COLOR 0,0,0,0
7800 CLS
7810 SCREEN 0
7820 SCREEN@ 0
7830 VIEW (0,0)-(639,479)
7840 FOR C=0 TO 15
7850 PALETTE C,[G(C),R(C),B(C)]
7860 NEXT C
7870 PMTIME$="24:00:00"
7880 COLOR 0,%0,%0
7890 CLS
7900 GOSUB *PANEL
7910 LINE (0,19)-(639, 25),PSET,%13,BF,%13
7920 LINE (0,26)-(639, 29),PSET,%14,BF,%14
7930 LINE (0,30)-(639, 37),PSET,%15,BF,%15
7940 GOSUB *INF
7950 RETURN
7960 *SAVE32K:'***** WHIPS用CDイメージ・ファイル保存 *****
7970 LINE (0,0)-(639,479),PSET,%0,BF,%0 '***** ページ0消去
7980 SCREEN 1,1,2,1 '***** ページ1表示開始
7990 SCREEN@ 1 '***** 32K色設定
8000 VIEW (0,0)-(319,239)
8010 COLOR 0,[G(0),R(0),B(0)],[G(0),R(0),B(0)]
8020 CLS 5
8030 *CD32K:'***** WHIPS用CD表面イメージ表示 *****
8040 PKMIN=64
8050 VTMIN=TOTALFLM/74/60
8060 IF 1<VTMIN/PKMIN THEN VTMIN=PKMIN
8070 VFLM=INT(((145^2-70^2)*VTMIN/PKMIN+70^2)^.5!)
8080 CIRCLE (157,157),157,[G(1),R(1),B(1)]
8090 CIRCLE (157,157),155,[G(1),R(1),B(1)],,,,F
8100 CIRCLE (157,157),148,[G(2),R(2),B(2)],,,,F
8110 CIRCLE (157,157),VFLM,[G(3),R(3),B(3)],,,,F
8120 GOSUB *CDCK32K
8130 CIRCLE (157,157),69,[G(2),R(2),B(2)],,,,F
8140 *CD32K2:'**********
8150 CIRCLE (157,157),63,[G(1),R(1),B(1)],,,,F
8160 CIRCLE (157,157),55,[G(0),R(0),B(0)],,,,F,PRESET
8170 CIRCLE (157,157),52,[G(1),R(1),B(1)]
8180 CIRCLE (157,157),48,[G(1),R(1),B(1)]
8190 CIRCLE (157,157),35,[G(1),R(1),B(1)]
8200 CIRCLE (157,157),22,[G(1),R(1),B(1)]
8210 CIRCLE (157,157),20,[G(1),R(1),B(1)]
8220 RETURN
8230 *CDCK32K:'***** 32K色CDチェック箇所イメージ表示 *****
8240 FOR CDV=CDI%(5) TO 1 STEP -1
8250 VLFLM=INT(((145^2-70^2)*DVSTFLM(CDV)/74/60/PKMIN+70^2)^.5!*VFLM/((145^2-70^2)*TOTALFLM/74/60/PKMIN+70^2)^.5!+.5!)
8260 IF ETRCOLOR(CDV)=3 THEN
8270 CIRCLE (157,157),VLFLM,[G(7),R(7),B(7)],,,,F '***** 青色
8280 GOTO *CDCK32KJ
8290 ENDIF
8300 IF ETRCOLOR(CDV)=1 THEN
8310 IF CDV=INT(CDV/2)*2 THEN
8320 CIRCLE (157,157),VLFLM,[G(4),R(4),B(4)],,,,F '***** 薄い紫色
8330 GOTO *CDCK32KJ
8340 ELSE
8350 CIRCLE (157,157),VLFLM,[G(5),R(5),B(5)],,,,F '***** 濃い紫色
8360 GOTO *CDCK32KJ
8370 ENDIF
8380 ENDIF
8390 IF CDV=CDS%(5) THEN
8400 CIRCLE (157,157),VLFLM,[G(8),R(8),B(8)],,,,F '***** 水色
8410 GOTO *CDCK32KJ
8420 ENDIF
8430 IF CDV=INT(CDV/2)*2 THEN
8440 CIRCLE (157,157),VLFLM,[G(6),R(6),B(6)],,,,F '***** 薄い灰色
8450 ELSE
8460 CIRCLE (157,157),VLFLM,[G(3),R(3),B(3)],,,,F '***** 濃い灰色
8470 ENDIF
8480 *CDCK32KJ:'**********
8490 NEXT CDV
8500 RETURN
8510 *WHIPSCDL:'***** WHIPS4.CDL自動編集 *****
8520 ON ERROR GOTO *ERRLOOP
8530 DIRC=0
8540 *WHPDIR:'***** WHP_FILE$のディレクトリ部分のバイト数 *****
8550 C=KINSTR(DIRC+1,WHP_FILE$,"\")
8560 IF 0<C THEN
8570 DIRC=C
8580 GOTO *WHPDIR
8590 ENDIF
8600 '*************************************
8610 IF WHIPFILE OR WCDLFILE THEN RETURN
8620 '*************************************
8630 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
8640 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用CDLファイルを編集中です》",1,1,%15
8650 '***** WHIPS用TIFファイル・ネーム・タグ(3BYTE)抽出 *****
8660 CDLMAX=0
8670 IF DIRC THEN
8680 DUMMY$=KMID$(WHP_FILE$,DIRC+1,KLEN(WHP_FILE$)-DIRC+1)
8690 ELSE
8700 DUMMY$=WHP_FILE$
8710 ENDIF
8720 DUMMY=KINSTR(DUMMY$,".")
8730 IF DUMMY<2 AND DUMMY$<>"" THEN '***** ワイルドカードが "*" or ".*"
8740 WHPFTAG$="CKW"
8750 ELSE
8760 IF DUMMY THEN '***** ワイルドカードが "*.*" or "*."
8770 DUMMY$=KLEFT$(DUMMY$,DUMMY-1)
8780 ENDIF
8790 IF LEN(DUMMY$)<4 THEN
8800 WHPFTAG$=LEFT$(DUMMY$+"___",3) '***** DUMMY$が3バイト以内
8810 ELSE
8820 IF KTYPE(MID$(DUMMY$,3,2),1) THEN '***** 3バイト目が2バイト文字
8830 WHPFTAG$=LEFT$(DUMMY$,2)+"_"
8840 ELSE
8850 WHPFTAG$=LEFT$(DUMMY$,3) '***** 3バイト目が1バイト文字
8860 ENDIF
8870 ENDIF
8880 ENDIF
8890 EP=4 '===== 元CDLファイル入力オープン =====
8900 OPEN CDL_FILE$ FOR INPUT AS #1
8910 IF EP=-1 THEN '***** CDLファイルが無い
8920 IF CDLEDT THEN
8930 CDLCNT=0 ' 新規CDLは追加しない
8940 CDLNO=0
8950 GOTO *EOCDLAPP
8960 ENDIF
8970 CDLCNT=1 ' 新規CDLは追加する
8980 CDLNO=1
8990 GOTO *EOCDLCK
9000 ENDIF
9010 EP=-1
9020 KILL TMP_FILE$
9030 EP=5 '===== 仮CDLファイル出力オープン =====
9040 OPEN TMP_FILE$ FOR OUTPUT AS #2
9050 '==========================================
9060 IF EOF(1) THEN *EOCDLCK
9070 LINE INPUT#1,DUMMY$
9080 PRINT #2,DUMMY$
9090 CDLMAX=VAL(DUMMY$)
9100 CDLCNT=0
9110 CDLNO=0
9120 GOSUB *CDL_INZ
9130 *CDLCK1:'**********
9140 IF EOF(1) THEN *EOCDLCK
9150 LINE INPUT#1,DUMMY$
9160 NE=0
9170 IF CDLNO THEN '***** 対象データ編集後はデータの追記のみ実行 *****
9180 IF DUMMY$="##" THEN CDLCNT=CDLCNT+1
9190 PRINT #2,DUMMY$
9200 ELSE '***** 対象データ検索 *****
9210 IF DUMMY$<>"##" THEN *EOCDLCK
9220 LINE INPUT#1,TI$
9230 LINE INPUT#1,AU$
9240 LINE INPUT#1,HB$
9250 LINE INPUT#1,CDLDAY$
9260 LINE INPUT#1,NO$
9270 LINE INPUT#1,TIF$
9280 LINE INPUT#1,WD$
9290 '***** 既存TIF名がCDCKの作成したものでない時は上書きしない *****
9300 IF WHPFTAG$+RIGHT$(STR$(100000+CDLMAX-CDLCNT),5)<>TIF$ THEN
9310 FOR C=1 TO KLEN(TIF$)
9320 IF KACNV$(KMID$(TIF$,C,1))<>" " THEN NE=1
9330 NEXT C
9340 ENDIF
9350 '***** 既存CDLのトラック数を比較 *****
9360 IF VAL(NO$)<>CDI%(5) OR NE=1 THEN
9370 NE=1 '***** 編集対象外のCDデータ *****
9380 FOR C=1 TO VAL(NO$)
9390 LINE INPUT#1,CDLTIME$(C)
9400 LINE INPUT#1,CDLTI$(C)
9410 NEXT C
9420 ELSE
9430 '***** 既存CDLと検査対象CDの各トラック・タイムを比較する *****
9440 FOR C=1 TO VAL(NO$)
9450 LINE INPUT#1,CDLTIME$(C)
9460 LINE INPUT#1,CDLTI$(C)
9470 MID$(CDLTIME$(C),3)=":"
9480 DUMMY$=LEFT$(TRKTIME$(C),5)
9490 DUMMIN=VAL(LEFT$(DUMMY$,2))
9500 DUMSEC=VAL(RIGHT$(DUMMY$,2))
9510 DUMSEC=DUMSEC-1 '***** CDLのトラック・タイムはCDSTIME$-1秒の場合がある
9520 IF DUMSEC<0 THEN
9530 DUMSEC=59
9540 DUMMIN=DUMMIN-1
9550 ENDIF
9560 DUMMY$=RIGHT$(STR$(100+DUMMIN),2)+":"+RIGHT$(STR$(100+DUMSEC),2)
9570 IF CDLTIME$(C)<>LEFT$(TRKTIME$(C),5) AND CDLTIME$(C)<>DUMMY$ THEN NE=1
9580 NEXT C
9590 '***************************************************************
9600 ENDIF
9610 PRINT #2,"##"
9620 PRINT #2,TI$
9630 PRINT #2,AU$
9640 PRINT #2,HB$
9650 PRINT #2,CDLDAY$
9660 PRINT #2,NO$
9670 '***** 編集対象外のデータ *****
9680 IF NE=1 THEN
9690 PRINT #2,TIF$
9700 '***** 編集対象のデータ *****
9710 ELSE
9720 CDLEDT=1
9730 CDLNO=CDLMAX-CDLCNT '***** データ登録番号 *****
9740 CDCKW$=WHPFTAG$+RIGHT$(STR$(100000+CDLNO),5)
9750 PRINT #2,CDCKW$ '***** CDL登録TIFファイル名 *****
9760 ENDIF
9770 PRINT #2,WD$
9780 FOR C=1 TO VAL(NO$)
9790 MID$(CDLTIME$(C),3)="'"
9800 PRINT #2,CDLTIME$(C)
9810 PRINT #2,CDLTI$(C)
9820 NEXT C
9830 CDLCNT=CDLCNT+1
9840 ENDIF
9850 GOTO *CDLCK1
9860 *EOCDLCK:'***********
9870 CLOSE #1,#2
9880 '***** WHIPS用新規CDLファイル作成 *****
9890 EP=-1
9900 KILL CDL_FILE$
9910 EP=6 '===== 新CDLファイル出力オープン =====
9920 OPEN CDL_FILE$ FOR OUTPUT AS #1
9930 '===========================================
9940 PRINT #1,RIGHT$(STR$(100000+CDLMAX+1-CDLEDT),5) '***** CDL登録件数
9950 '***** 新規登録 *****
9960 IF CDLEDT=0 THEN
9970 CDLNO=CDLMAX+1
9980 NE=1
9990 PRINT #1,"##"
10000 PRINT #1,SPACE$(42)
10010 PRINT #1,SPACE$(42)
10020 PRINT #1,SPACE$(42)
10030 IF LEFT$(DATE$,2)="00" THEN
10040 DUMMY$="20"+DATE$
10050 ELSE
10060 DUMMY$="19"+DATE$
10070 ENDIF
10080 MID$(DUMMY$,5)="."
10090 MID$(DUMMY$,8)="."
10100 PRINT #1,DUMMY$
10110 PRINT #1,USING "##";CDI%(5)
10120 CDCKW$=WHPFTAG$+RIGHT$(STR$(100000+CDLNO),5)
10130 PRINT #1,CDCKW$
10140 PRINT #1,SPACE$(6)
10150 FOR C=1 TO CDI%(5)
10160 DUMMY$=LEFT$(TRKTIME$(C),5)
10170 MID$(DUMMY$,3)="'"
10180 PRINT #1,DUMMY$
10190 DUMMY$=".. Music No."+RIGHT$(STR$(C),2)+" .."+SPACE$(25)
10200 PRINT #1,DUMMY$
10210 NEXT C
10220 IF CDLMAX=0 THEN '***** 元のCDLが無く、新規CDL作成完了 *****
10230 CLOSE #1
10240 RETURN
10250 ENDIF
10260 ENDIF
10270 *CDLAPP:'***** 仮CDLファイルを新規CDLファイルに追加 *****
10280 CLOSE #2
10290 EP=7 '===== 仮CDLファイル入力オープン =====
10300 OPEN TMP_FILE$ FOR INPUT AS #2
10310 '===========================================
10320 IF EOF(2) THEN *EOCDLAPP
10330 LINE INPUT#2,DUMMY$
10340 *CDLAPPLP:'*****
10350 IF EOF(2) THEN *EOCDLAPP
10360 LINE INPUT#2,DUMMY$
10370 PRINT #1,DUMMY$
10380 GOTO *CDLAPPLP
10390 *EOCDLAPP:'*****
10400 EP=0
10410 CLOSE
10420 RETURN
10430 *CDL_INZ:'***** CDL読み込み変数初期化 *****
10440 TI$=""
10450 AU$=""
10460 HB$=""
10470 CDLDAY$=""
10480 NO$=""
10490 TIF$=""
10500 WD$=""
10510 FOR C=0 TO MTR
10520 CDLTIME$(C)=""
10530 CDLTI$(C)=""
10540 NEXT C
10550 RETURN
10560 *CDCK_LOG:'***** 検査LOG *****
10570 IF CDCK_LOG THEN RETURN
10580 ON ERROR GOTO *ERRLOOP
10590 IF CDLNO=0 AND WCDLFILE=0 THEN GOSUB *CDL_INZ
10600 EP=8
10610 OPEN LOG_FILE$ FOR APPEND AS #1
10620 IF CDI%(1)=1 THEN
10630 PRINT #1,"《音楽専用";
10640 ELSE
10650 IF CDI%(1)=3 THEN
10660 PRINT #1,"《データ共用";
10670 ENDIF
10680 ENDIF
10690 PRINT #1,"CD傷検査(";DATE$;"-";TIME$;")》"
10700 IF WHIPFILE=0 THEN
10710 DUMMY$=TI$
10720 GOSUB *RTRIM
10730 IF DUMMY$="" THEN
10740 PRINT #1,"(タイトル未登録)"
10750 ELSE
10760 PRINT #1,DUMMY$
10770 ENDIF
10780 DUMMY$=AU$
10790 GOSUB *RTRIM
10800 IF DUMMY$="" THEN
10810 PRINT #1,"(責任表示未登録)"
10820 ELSE
10830 PRINT #1,DUMMY$
10840 ENDIF
10850 DUMMY$=HB$
10860 GOSUB *RTRIM
10870 IF DUMMY$="" THEN
10880 PRINT #1,"(発売番号未登録)"
10890 ELSE
10900 PRINT #1,DUMMY$
10910 ENDIF
10920 PRINT #1,"《";CDCKW$;"》"
10930 ENDIF
10940 PRINT #1,USING "【Total:###トラック ##m##s##フレーム(s/75)】";CDI%(5);CDI%(2);CDI%(3);CDI%(4)
10950 FOR C=1 TO CDI%(5)
10960 PRINT #1,USING"###/& &";C;TRKTIME$(C);
10970 IF ETRTIME$(C)="" THEN
10980 PRINT #1,""
10990 ELSE
11000 PRINT #1," ←<<< ";RIGHT$(ETRTIME$(C),20);"付近に傷あり"
11010 ENDIF
11020 IF CDLTI$(C)<>"" THEN
11030 PRINT #1," (";CDLTIME$(C);")";
11040 DUMMY$=CDLTI$(C)
11050 GOSUB *RTRIM
11060 IF DUMMY$="" THEN
11070 PRINT #1,""
11080 ELSE
11090 PRINT #1," ";DUMMY$
11100 ENDIF
11110 ENDIF
11120 NEXT C
11130 PRINT #1,""
11140 *EOLOG:'***** END OF LOG *****
11150 EP=0
11160 CLOSE #1
11170 RETURN
11180 *RTRIM:'***** 右側空白削除 *****
11190 DUMMY=0
11200 FOR CC=1 TO KLEN(DUMMY$)
11210 IF KACNV$(KMID$(DUMMY$,CC,1))<>" " THEN DUMMY=CC
11220 NEXT CC
11230 IF KLEFT$(DUMMY$,DUMMY)="" THEN
11240 DUMMY$=""
11250 ELSE
11260 DUMMY$=KLEFT$(DUMMY$,DUMMY)
11270 ENDIF
11280 RETURN
11290 *CDDINIT:'***** CDドライブ初期化
11300 OUT &H04C0,&HC7
11310 OUT &H04C0,&H03
11320 RETURN
11330 *ERRLOOP:'***** エラー処理ルーチン *****
11340 IF EP=-2 THEN LOCATE 40,0:PRINT ERR;ERL:STOP
11350 IF EP=-1 THEN
11360 EP=0
11370 RESUME NEXT
11380 ENDIF
11390 IF EP=1 THEN *ERRLOOP1
11400 IF EP=2 THEN *ERRLOOP2
11410 IF EP=3 THEN *ERRLOOP3
11420 IF EP=4 THEN *ERRLOOP4
11430 IF EP=5 THEN *ERRLOOP5
11440 IF EP=6 THEN *ERRLOOP6
11450 IF EP=7 THEN *ERRLOOP7
11460 IF EP=8 THEN *ERRLOOP8
11470 COLOR 2
11480 IF LPRN=1 THEN
11490 ELPRN=1
11500 LOCATE 41,2
11510 COLOR 10
11520 PRINT " 《 印刷機能は停止しています 》 "
11530 RESUME NEXT
11540 ENDIF
11550 LOCATE 41,2
11560 PRINT USING "### トラック### 分### 秒目付近が再生不能 ";STRACK;ONMIN;ONSEC
11570 GOSUB *CDDINIT
11580 IF RETRY+1<RETRYMAX THEN
11590 RETRY=RETRY+1
11600 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
11610 SYMBOL (DVX-8*17,DVY+160),"《 再検査中イメージを停止します 》",1,1,%15
11620 RESUME *ERSTART
11630 ENDIF
11640 RETRY=0
11650 IF CDI%(5)<STRACK THEN
11660 STRACK=CDI%(5)
11670 RESUME *ENST
11680 ENDIF
11690 IF ELPRN=0 THEN LPRINT USING "###トラック###分###秒目(トータル###分###秒目)付近に傷があります。";STRACK;ONMIN;ONSEC;CKMIN;CKSEC
11700 IF CDS%(5)=CDI%(5) THEN
11710 ETRCOLOR(CDI%(5))=1
11720 ETRTIME$(CDI%(5))=RIGHT$(" "+STR$(STRACK),4)+"/"+RIGHT$(STR$(ONMIN),2)+"m"+RIGHT$(STR$(100+ONSEC),2)+"s(Total:"+RIGHT$(STR$(CKMIN),2)+"m"+RIGHT$(STR$(100+CKSEC),2)+"s)"
11730 GOSUB *STIME
11740 RESUME *ENST
11750 ELSE
11760 ETRCOLOR(STRACK)=1
11770 ETRTIME$(STRACK)=RIGHT$(" "+STR$(STRACK),4)+"/"+RIGHT$(STR$(ONMIN),2)+"m"+RIGHT$(STR$(100+ONSEC),2)+"s(Total:"+RIGHT$(STR$(CKMIN),2)+"m"+RIGHT$(STR$(100+CKSEC),2)+"s)"
11780 STRACK=STRACK+1
11790 CDS%(5)=STRACK
11800 CKMIN=CDS%(2)
11810 CKSEC=CDS%(3)
11820 CKFLM=CDS%(4)
11830 ENDIF
11840 GOSUB *STIME
11850 RESUME *ERSTART
11860 *ERRLOOP1:'***** CD未挿入 *****
11870 COLOR 10
11880 LOCATE 24,12
11890 PRINT " 《 CDをセットしてください 》 "
11900 GOSUB *ERPAUSE
11910 COLOR 0
11920 LOCATE 24,12
11930 PRINT SPACE$(32)
11940 START=0
11950 EP=0
11960 RESUME *MAIN
11970 *ERRLOOP2:'***** CDイメージ・ファイル消去 *****
11980 COLOR 10
11990 LOCATE 14,12
12000 PRINT " 《 CDイメージ・ファイルは作成できませんでした 》 "
12010 GOSUB *ERPAUSE
12020 COLOR 0
12030 LOCATE 14,12
12040 PRINT SPACE$(52)
12050 RESUME NEXT
12060 *ERRLOOP3:'***** WHIPS用CDイメージ・ファイル消去 *****
12070 COLOR 10
12080 SYMBOL (X,200),SPACE$(28),1,1,[G(0),R(0),B(0)]
12090 SYMBOL (X,200),"《WHIPS用TIFは保存不能です》",1,1,[G(15),R(15),B(15)]
12100 GOSUB *ERPAUSEG
12110 SYMBOL (X,200),SPACE$(28),1,1,[G(0),R(0),B(0)]
12120 RESUME NEXT
12130 *ERRLOOP4:'***** WHIPS4.CDL無し *****
12140 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12150 IF CDLEDT THEN
12160 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用CDLファイル編集不能です》",1,1,%15
12170 ELSE
12180 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用新規CDLファイルを編集中》",1,1,%15
12190 ENDIF
12200 GOSUB *ERPAUSE
12210 EP=-1
12220 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12230 RESUME NEXT
12240 *ERRLOOP5:'***** WHIPS用仮CDLファイル出力オープンエラー *****
12250 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12260 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用仮CDLファイル書込み失敗》",1,1,%15
12270 GOSUB *ERPAUSE
12280 EP=0
12290 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12300 RESUME *EOCDLAPP
12310 *ERRLOOP6:'***** WHIPS用新規CDLファイル出力オープンエラー *****
12320 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12330 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用CDLファイル書き戻し失敗》",1,1,%15
12340 GOSUB *ERPAUSE
12350 EP=0
12360 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12370 RESUME *EOCDLAPP
12380 *ERRLOOP7:'***** WHIPS用仮CDLファイル入力オープンエラー *****
12390 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12400 SYMBOL (DVX-8*17,DVY+160),"《WHIPS用仮CDLファイル読込み不能》",1,1,%15
12410 GOSUB *ERPAUSE
12420 EP=0
12430 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12440 RESUME *EOCDLAPP
12450 *ERRLOOP8:'***** 検査LOG書き込みエラー *****
12460 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12470 SYMBOL (DVX-8*17,DVY+160),"《検査LOGファイルは保存不能です》",1,1,%15
12480 GOSUB *ERPAUSE
12490 LINE (DVX-8*17,DVY+160)-(DVX+8*17,DVY+178),PSET,%0,BF,%0
12500 RESUME *EOLOG
12510 *ERPAUSE:'***** キー入力待ち一時停止 *****
12520 C=0
12530 *ERP1:'**********
12540 GOSUB *PANEL
12550 I$=INKEY$
12560 IF 1000<C OR I$<>"" OR MOUSE(2,0) OR MOUSE(2,1) OR PAD(1) OR PTRIG(1) THEN *ERP2
12570 C=C+1
12580 GOTO *ERP1
12590 *ERP2:'**********
12600 C=0
12610 RETURN
12620 *ERPAUSEG:'***** キー入力待ち一時停止(GOSUB *PANEL 無し)*****
12630 C=0
12640 *ERPG1:'**********
12650 I$=INKEY$
12660 IF 2000<C OR I$<>"" OR MOUSE(2,0) OR MOUSE(2,1) OR PAD(1) OR PTRIG(1) THEN *ERPG2
12670 C=C+1
12680 GOTO *ERPG1
12690 *ERPG2:'**********
12700 C=0
12710 RETURN